package 二分;

import java.util.Arrays;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/6/10 13:44
 */
public class lc1170比较字符串出现的最小频次 {


    /*
     题很简单
     ， 关键是转换的这个过程！
     */

    public int [] solution(String q[],String w[]){
        int ans[] = new int[q.length],arr[] = new int[w.length];
        for(int i = 0;i < w.length;i++){
            arr[i] = f(w[i]);
        }
        // sort + binary
        Arrays.sort(arr);
        for(int i = 0;i < q.length;i++){
            ans[i] = binarySearch(f(q[i]),arr);
        }
        return ans;
    }
    // 该题 相当于 找 > aim 的最左边的位置
    public int binarySearch(int aim,int nums[]){
        int l = 0,r = nums.length - 1;
        while(l < r){
            int mid = l + r >> 1;
            if(nums[mid] <= aim){
                l = mid + 1;
            }else{
                r = mid;
            }
        }
        // 进行一个 判断， 有可能没有找到
        return l == nums.length - 1 ? (nums[nums.length - 1] > aim ? 1 : 0) : nums.length - l;
    }

    public int f(String s){
        int count[] = new int[26];
        for(char ch : s.toCharArray()) {
            count[ch - 'a']++;
        }
        int ans = 0;
        for(int num : count){
            if(num != 0){
                return  ans = num;
            }
        }
        return ans;
    }

}
